[IA64] use of max_addr= & command line
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 16 Mar 2006 19:06:48 +0000 (12:06 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 16 Mar 2006 19:06:48 +0000 (12:06 -0700)
Use 'max_addr' option to limit the amount of physical memory.  The
default is 4G (the same as the previous hard limit).  The hard-coded
limit is removed.  dom0_command_line now contains the cmdline for
dom0 linux.  saved_command_line now contains the cmdline for Xen (it
is used in Xen).

Signed-off-by: Tristan Gingold <tristan.gingold@bull.net>
xen/arch/ia64/linux-xen/efi.c
xen/arch/ia64/linux-xen/setup.c
xen/arch/ia64/xen/domain.c
xen/arch/ia64/xen/xensetup.c

index c77afb17ea4a805e34e50f7919ba3a7d08d167de..2d4423c93b27c0f1eacc68328765e3a060df204a 100644 (file)
@@ -42,7 +42,12 @@ extern unsigned long long memparse (char *ptr, char **retptr);
 struct efi efi;
 EXPORT_SYMBOL(efi);
 static efi_runtime_services_t *runtime;
+#ifdef XEN
+// this is a temporary hack to avoid CONFIG_VIRTUAL_MEM_MAP
+static unsigned long mem_limit = ~0UL, max_addr = 0x100000000;
+#else
 static unsigned long mem_limit = ~0UL, max_addr = ~0UL;
+#endif
 
 #define efi_call_virt(f, args...)      (*(f))(args)
 
@@ -329,8 +334,6 @@ efi_memmap_walk (efi_freemem_callback_t callback, void *arg)
                if (running_on_sim && md->type != EFI_CONVENTIONAL_MEMORY)
                        continue;
 }
-// this is a temporary hack to avoid CONFIG_VIRTUAL_MEM_MAP
-               if (md->phys_addr >= 0x100000000) continue;
 #endif
                /*
                 * granule_addr is the base of md's first granule.
index ac75b8614217d87e8438167b566f16e114b5daf3..92b0b8cb11b62761d111ef788c8e94771122a4f1 100644 (file)
@@ -384,6 +384,9 @@ setup_arch (char **cmdline_p)
        *cmdline_p = __va(ia64_boot_param->command_line);
 #ifndef XEN
        strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE);
+#else
+       early_cmdline_parse(cmdline_p);
+       cmdline_parse(*cmdline_p);
 #endif
 
        efi_init();
@@ -414,10 +417,6 @@ setup_arch (char **cmdline_p)
        }
 #endif
 
-#ifdef XEN
-       early_cmdline_parse(cmdline_p);
-       cmdline_parse(*cmdline_p);
-#endif
        if (early_console_setup(*cmdline_p) == 0)
                mark_bsp_online();
 
index 2b0ca6024fcf9186854e0e6afe1d75e47249539c..2c85d9e7151ae0691f334653740357af4b7a5217 100644 (file)
@@ -26,6 +26,7 @@
 #include <asm/processor.h>
 #include <asm/desc.h>
 #include <asm/hw_irq.h>
+#include <asm/setup.h>
 //#include <asm/mpspec.h>
 #include <xen/irq.h>
 #include <xen/event.h>
@@ -36,7 +37,6 @@
 #include <xen/elf.h>
 //#include <asm/page.h>
 #include <asm/pgalloc.h>
-#include <asm/dma.h>   /* for MAX_DMA_ADDRESS */
 
 #include <asm/asm-offsets.h>  /* for IA64_THREAD_INFO_SIZE */
 
@@ -49,6 +49,7 @@
 #include <asm/pal.h>
 #include <asm/vhpt.h>
 #include <public/hvm/ioreq.h>
+#include <public/arch-ia64.h>
 #include <asm/tlbflush.h>
 #include <asm/regionreg.h>
 
@@ -415,7 +416,7 @@ void new_thread(struct vcpu *v,
 {
        struct domain *d = v->domain;
        struct pt_regs *regs;
-       extern char saved_command_line[];
+       extern char dom0_command_line[];
 
 #ifdef CONFIG_DOMAIN0_CONTIGUOUS
        if (d == dom0) start_pc += dom0_start;
@@ -439,24 +440,27 @@ void new_thread(struct vcpu *v,
        if (VMX_DOMAIN(v)) {
                vmx_init_all_rr(v);
                if (d == dom0)
-//                 VCPU(v,vgr[12]) = dom_fw_setup(d,saved_command_line,256L);
-                   regs->r28 = dom_fw_setup(d,saved_command_line,256L);
+                   regs->r28 = dom_fw_setup(d,dom0_command_line,
+                                            COMMAND_LINE_SIZE);
                /* Virtual processor context setup */
                VCPU(v, vpsr) = IA64_PSR_BN;
                VCPU(v, dcr) = 0;
        } else {
                init_all_rr(v);
                if (d == dom0) 
-                   regs->r28 = dom_fw_setup(d,saved_command_line,256L);
+                   regs->r28 = dom_fw_setup(d,dom0_command_line,
+                                            COMMAND_LINE_SIZE);
                else {
                    regs->ar_rsc |= (2 << 2); /* force PL2/3 */
                    if (*d->arch.cmdline == '\0') {
 #define DEFAULT_CMDLINE "nomca nosmp xencons=tty0 console=tty0 root=/dev/hda1"
-                       regs->r28 = dom_fw_setup(d,DEFAULT_CMDLINE,256L);
+                       regs->r28 = dom_fw_setup(d,DEFAULT_CMDLINE,
+                                                sizeof (DEFAULT_CMDLINE));
                        printf("domU command line defaulted to"
                                DEFAULT_CMDLINE "\n");
                    }
-                   else regs->r28 = dom_fw_setup(d,d->arch.cmdline,256L);
+                   else regs->r28 = dom_fw_setup(d,d->arch.cmdline, 
+                                                 IA64_COMMAND_LINE_SIZE);
                }
                VCPU(v, banknum) = 1;
                VCPU(v, metaphysical_mode) = 1;
@@ -645,12 +649,13 @@ unsigned long lookup_domain_mpa(struct domain *d, unsigned long mpaddr)
 
 #ifdef CONFIG_DOMAIN0_CONTIGUOUS
        if (d == dom0) {
+               pte_t pteval;
                if (mpaddr < dom0_start || mpaddr >= dom0_start + dom0_size) {
                        //printk("lookup_domain_mpa: bad dom0 mpaddr 0x%lx!\n",mpaddr);
                        //printk("lookup_domain_mpa: start=0x%lx,end=0x%lx!\n",dom0_start,dom0_start+dom0_size);
                        mpafoo(mpaddr);
                }
-               pte_t pteval = pfn_pte(mpaddr >> PAGE_SHIFT,
+               pteval = pfn_pte(mpaddr >> PAGE_SHIFT,
                        __pgprot(__DIRTY_BITS | _PAGE_PL_2 | _PAGE_AR_RWX));
                pte = &pteval;
                return *(unsigned long *)pte;
index 2599ef1ec874ef716333bba03883a3afe538fb22..89c2a350fc1045b8fb4ff13e52ab7357dbdec71b 100644 (file)
@@ -27,6 +27,7 @@
 unsigned long xenheap_phys_end;
 
 char saved_command_line[COMMAND_LINE_SIZE];
+char dom0_command_line[COMMAND_LINE_SIZE];
 
 struct vcpu *idle_vcpu[NR_CPUS];
 
@@ -119,11 +120,12 @@ static char null[4] = { 0 };
 void early_cmdline_parse(char **cmdline_p)
 {
     char *guest_cmd;
-    char *split = "--";
+    static const char * const split = "--";
 
     if (*cmdline_p == NULL) {
        *cmdline_p = &null[0];
        saved_command_line[0] = '\0';
+       dom0_command_line[0] = '\0';
        return;
     }
 
@@ -138,7 +140,8 @@ void early_cmdline_parse(char **cmdline_p)
        while (*guest_cmd == ' ') guest_cmd++;
     }
 
-    strlcpy(saved_command_line, guest_cmd, COMMAND_LINE_SIZE);
+    strlcpy(saved_command_line, *cmdline_p, COMMAND_LINE_SIZE);
+    strlcpy(dom0_command_line, guest_cmd, COMMAND_LINE_SIZE);
     return;
 }